package cn.com.huzo.repository.tech;

import cn.com.huzo.model.entities.tech.MrpLinesResultEntity;
import huzofw.repository.GenericRepository;
import java.util.List;
import java.util.Map;

/**
 * 物料需求计划-明细数据访问对象接口
 *
 * @author 吴旭
 */
public interface MrpLinesResultRepository extends GenericRepository<MrpLinesResultEntity, String> {

    /**
     * 根据物料需求计划标识取得物料需求明细。
     *
     * @param headerId 物料需求计划标识
     * @return 物料需求明细
     */
    List<MrpLinesResultEntity> fetchByHeaderId(Long headerId);

    /**
     * 仓库根据款号取得备料信息
     *
     * @param paramsMap
     * @return
     */
    List<Map<String, Object>> fetchForStockOut(Map<String, Object> paramsMap);

    /**
     * 根据搭配类型取得物料需求明细。
     *
     * @param headerId 物料需求计划标识
     * @param assortmentType 搭配类型
     * @param sortType 排序方法
     * @return 物料需求明细
     */
    List<MrpLinesResultEntity> fetchByAssortmentType(Long headerId, Short assortmentType, Short sortType);

    /**
     * 取得选择的调达表全部明细ID
     *
     * @param criterion
     * @return
     */
    List<String> fetchAllSelectedLines(Map<String, Object> criterion);

    /**
     * 按色取得调达表数据用来打印。
     *
     * @param headerId 物料需求计划ID
     * @param moHeaderId 生产指示书ID
     * @param productId 产品ID
     * @param productColourId 成品色ID
     * @return 物料需求明细
     */
    List<MrpLinesResultEntity> fetchPrintDataByProductColour(
            Long headerId, Long moHeaderId, Long productId, Long productColourId);

    /**
     * 取得生产指示书格式的明细打印数据
     *
     * @param headerId 物料需求计划ID
     * @return
     */
    List<MrpLinesResultEntity> fetchPrintDataWithMoFormat(Long headerId);

    /**
     * 根据搭配标识删除物料需求明细数据
     *
     * @param assortmentLinesId 搭配标识
     * @return 影响行数
     */
    Integer deleteByAssortmentLinesId(String assortmentLinesId);

    /**
     * 根据物料需求计划标识删除物料需求明细数据
     *
     * @param headerId 物料需求计划标识
     * @return 影响行数
     */
    Integer deleteByHeaderId(Long headerId);

    /**
     * 通过提前组料单更新定版调达的提前组料数、规格、备注，并重新计算补给数
     *
     * @param headerId 定版调达ID
     * @param priorMrpHeaderId 提前组料单ID
     * @param updatedBy 操作者
     * @return 影响行数
     */
    Integer updateByPriorMrpLines(Long headerId, Long priorMrpHeaderId, Long updatedBy);

    /**
     * 根据成品信息，更新每一个搭配计算的成品数量(可用于订单数更改的情况)
     *
     * @param criterion
     * @return
     */
    Integer updateProductQuantity(Map<String, Object> criterion);

    /**
     * 根据成品信息，更新每一个搭配计算的成品数量(可用于订单数更改的情况，带发货目的地)
     *
     * @param criterion
     * @return
     */
    Integer updateProductQuantityWithDestination(Map<String, Object> criterion);

    /**
     * 重新计算物料需求信息
     *
     * @param criterion
     * @return
     */
    Integer reCalculate(Map<String, Object> criterion);

    /**
     * 用历史数据更新每种材料的物料需求明细
     * <p>
     * @param headerId 要更新的物料搭配计划标识
     * @param historyHeaderId 之前该款的材料搭配计算类型
     * @param updatedBy 更新者
     * @return 影响行数
     */
    Integer updateByHistoryData(Long headerId, Long historyHeaderId, Long updatedBy);

    // <editor-fold defaultstate="collapsed" desc="订单相关用">
    /**
     * 根据订单ID得到该订单所属各款各款尺码对应的圆卡数量
     *
     * @param poHeaderId 订单ID
     * @return 各款尺码对应的圆卡数量
     */
    List<Map<String, Object>> fetchRoundCardQuantityFromMrpByPoHeaderId(Long poHeaderId);

    /**
     * 根据订单ID得到该订单所属各款各款尺码对应的衣架贴数量
     *
     * @param poHeaderId 订单ID
     * @return 各款尺码对应的衣架贴数量
     */
    List<Map<String, Object>> fetchHangerStickerQuantityFromMrpByPoHeaderId(Long poHeaderId);
    // </editor-fold>
}
